set.seed(1014)

knitr::knit_hooks$set(inline = function(x) prettyNum(x, big.mark = ".", decimal.mark = ","))

options(
  digits = 1,
  scipen = 999,
  OutDec = ",",
  knitr.kable.NA = "",
  radian.auto_match = FALSE
)

Sys.setenv(LANGUAGE = "pt-br")
Sys.setlocale("LC_TIME", "pt_BR")
#> [1] ""
library(tidyverse)
library(lubridate)
library(glue)
library(here)
library(ggtext)
library(patchwork)
library(kableExtra)
library(hrbrthemes)
library(tidytext)
library(wordcloud)
source(here("src/5-funcao-limpando-texto.R"))
`%notin%` <- function(x, y) !(x %in% y)
source(here("src/0-paleta-de-cores.R"), encoding = "UTF-8")

theme_set(theme_minimal())

theme_update(
  panel.grid.minor = element_blank(),
  panel.background = element_rect(fill = "gray97", color = "transparent")
)
pedidos_cgu <- "dados/load/rds/pedidos-cgu.rds" %>% 
  here() %>% 
  readRDS() %>%
  rename(orgao = orgaodestinatario) %>% 
  filter(decisao %notin% c(
    "Pergunta Duplicada/Repetida",
    "Não se trata de solicitação de informação"
  ))

recursos_cgu <- "dados/load/rds/recursos-cgu.rds" %>% 
  here() %>% 
  readRDS() %>%
  rename(orgao = orgaodestinatario) %>% 
  distinct() %>% 
  group_by(id_pedido) %>% 
  filter(row_number() == 1) %>% 
  ungroup()

recursos_cgu %>% count(id_pedido, sort = T)
#> # A tibble: 56.869 x 2
#>    id_pedido     n
#>    <chr>     <int>
#>  1 1435122       1
#>  2 1435396       1
#>  3 1435521       1
#>  4 1435524       1
#>  5 1435710       1
#>  6 1435717       1
#>  7 1435844       1
#>  8 1436030       1
#>  9 1436075       1
#> 10 1436151       1
#> # ... with 56.859 more rows

pedidos_clean <- "dados/load/rds/pedidos-clean.rds" %>% 
  here() %>% 
  readRDS() 

recursos_clean <- "dados/load/rds/recursos-clean.rds" %>% 
  here() %>% 
  readRDS() %>% 
  distinct() %>% 
  group_by(id_pedido) %>% 
  filter(row_number() == 1) %>% 
  ungroup()
pedidos_clean <- pedidos_clean %>% 
  mutate(
    usa_lgpd_pedido_resumido = str_detect(resumo_solicitacao_clean, "LGPD"),
    usa_lgpd_pedido = str_detect(detalhamento_solicitacao_clean, "LGPD"),
    usa_lgpd_resposta = str_detect(resposta_clean, "LGPD")
  )

recursos_clean <- recursos_clean %>% 
  mutate(
    usa_lgpd_recurso = str_detect(desc_recurso_clean, "LGPD"),
    usa_lgpd_resposta_recurso = str_detect(resposta_recurso_clean, "LGPD"),
    usa_lgpd = usa_lgpd_recurso | usa_lgpd_resposta_recurso
  )




lgpd <- pedidos_cgu %>% 
  select(
    id_pedido, orgao, data_registro,
    resumo_solicitacao, detalhamento_solicitacao, 
    resposta, decisao, assunto_pedido
  ) %>% 
  left_join(pedidos_clean) %>%
  mutate(
    usa_lgpd_assunto = assunto_pedido == "Dados Pessoais - LGPD",
    usa_lgpd_pedido_resumido = replace_na(usa_lgpd_pedido_resumido, FALSE),
    usa_lgpd = !(
      !usa_lgpd_pedido_resumido & 
      !usa_lgpd_pedido &
      !usa_lgpd_resposta & 
      !usa_lgpd_assunto
  ))

ord_interacao <- ordered(c(
   "usa_lgpd",
   "usa_lgpd_assunto",
   "usa_lgpd_pedido_resumido",
   "usa_lgpd_pedido",
   "usa_lgpd_resposta",
   "usa_lgpd_recurso_primeira_instancia",
   "usa_lgpd_resposta_recurso_primeira_instancia",
   "usa_lgpd_recurso_segunda_instancia",
   "usa_lgpd_resposta_recurso_segunda_instancia",
   "usa_lgpd_recurso_cgu",
   "usa_lgpd_resposta_recurso_cgu",
   "usa_lgpd_recurso_cmri",
   "usa_lgpd_resposta_recurso_cmri",
   "usa_lgpd_revisao",
   "usa_lgpd_resposta_revisao"
))

recursos_clean_instancias <- recursos_clean %>% 
  select(starts_with("id"), where(is.logical)) %>% 
  left_join(
    recursos_cgu %>% 
      select(id_pedido, id_recurso, instancia)
  ) %>% 
  select(-id_recurso)

recs <- recursos_clean_instancias %>% 
  mutate(instancia = if_else(instancia == "Terceira Instância", "CGU", instancia)) %>% 
  group_by(instancia) %>% 
  nest() %>% 
  ungroup() %>% 
  deframe()

recs$`Primeira Instância` <- recs$`Primeira Instância` %>% 
  rename(
    usa_lgpd_recurso_primeira_instancia = usa_lgpd_recurso,
    usa_lgpd_resposta_recurso_primeira_instancia = usa_lgpd_resposta_recurso
  ) %>%
  select(-usa_lgpd)

recs$`Segunda Instância` <- recs$`Segunda Instância` %>% 
  rename(
    usa_lgpd_recurso_segunda_instancia = usa_lgpd_recurso,
    usa_lgpd_resposta_recurso_segunda_instancia = usa_lgpd_resposta_recurso
  ) %>%
  select(-usa_lgpd)

recs$`CGU` <- recs$`CGU` %>% 
  rename(
    usa_lgpd_recurso_cgu = usa_lgpd_recurso,
    usa_lgpd_resposta_recurso_cgu = usa_lgpd_resposta_recurso
  ) %>%
  select(-usa_lgpd)

recs$`CMRI` <- recs$`CMRI` %>% 
  rename(
    usa_lgpd_recurso_cmri = usa_lgpd_recurso,
    usa_lgpd_resposta_recurso_cmri = usa_lgpd_resposta_recurso
  ) %>%
  select(-usa_lgpd)

recs$`Pedido de Revisão` <- recs$`Pedido de Revisão` %>% 
  rename(
    usa_lgpd_revisao = usa_lgpd_recurso,
    usa_lgpd_resposta_revisao = usa_lgpd_resposta_recurso
  ) %>%
  select(-usa_lgpd)


lbl_x <- c("Assunto", "Resumo do\npedido", 
           "Pedido", "Resposta", "Reclamação", "Resposta\nreclamação",
           "Recurso 1ª", "Resposta\nrecurso 1ª", "Recurso 2ª", 
           "Resposta\nrecurso 2ª", "CGU", "Resposta\nCGU 3ª",
           "CMRI", "Resposta\nCMRI")

cores_detecta_lgpd <- c(
  "Termo LGPD não detectado" = cores_aep[["laranja"]],
  "Termo LGPD detectado" = cores_aep[["rosa"]]
)

recs %>%  
  reduce(full_join) %>% 
  left_join(lgpd, .) %>% 
  select(id_pedido, where(is.logical)) %>% 
  count(
    usa_lgpd,
    usa_lgpd_assunto,
    usa_lgpd_pedido_resumido,
    usa_lgpd_pedido,
    usa_lgpd_resposta,
    usa_lgpd_recurso_primeira_instancia,
    usa_lgpd_resposta_recurso_primeira_instancia,
    usa_lgpd_recurso_segunda_instancia,
    usa_lgpd_resposta_recurso_segunda_instancia,
    usa_lgpd_recurso_cgu,
    usa_lgpd_resposta_recurso_cgu,
    usa_lgpd_recurso_cmri,
    usa_lgpd_resposta_recurso_cmri,
    usa_lgpd_revisao,
    usa_lgpd_resposta_revisao,
    sort = T
  ) %>% 
  mutate(combinacao = str_glue("Combinação {row_number()}")) %>% 
  pivot_longer(
    -c(n, combinacao),
    names_to = "onde",
    values_to = "usa"
  ) %>% 
  filter(!is.na(usa), onde != "usa_lgpd") %>% 
  mutate(onde = ordered(onde, levels = ord_interacao),
         usa = case_when(
           usa ~ "Termo LGPD detectado",
           !usa ~ "Termo LGPD não detectado"
  )) %>% 
  ggplot(aes(
    x = onde,
    y = reorder(combinacao, n),
    fill = usa,
    group = reorder(combinacao, n)
  )) +
  geom_line() +
  geom_point(color = "transparent", shape = 21, size = 4) +
  geom_text(
    data = . %>% filter(onde == "usa_lgpd_assunto"),
    aes(label = n),
    hjust = 1,
    check_overlap = T
  ) +
  scale_x_discrete(labels = lbl_x, position = "top") +
  scale_fill_manual(values = cores_detecta_lgpd) +
  labs(
    title = "Mapeamento do pedido do início ao fim",
    subtitle = str_glue(
      "Cada ponto é uma interação registrada,",
      "o texto da interação foi analizado detectando",
      "ou não termos associados a LGPD"
    ),
    fill = NULL,
    x = NULL,
    y = NULL
  ) +
  theme(
    legend.position = "top",
    legend.direction = "horizontal",
    legend.justification = "left",
    axis.ticks.x = element_blank(),
    axis.text.y = element_blank()
  )

Evolução de uso da LGPD em pedidos LAI

O gráfico abaixo mostra a evolução dos pedidos onde alguma menção à LGPD foi detectada tanto no pedido quanto na resposta.

lgpd %>% 
  filter(year(data_registro) >= 2018) %>% 
  count(data_registro, usa_lgpd) %>% 
  mutate(usa_lgpd = if_else(usa_lgpd, "Sim (quantidade)", "Não")) %>% 
  ggplot(aes(x = data_registro, y = n, fill = reorder(usa_lgpd, -n))) +
  geom_col() +
  geom_text(
    data = . %>%
      add_count(data_registro, wt = n) %>% 
      filter(usa_lgpd == "Não") %>%
      mutate(nn - n) %>% 
      filter(`nn - n` > 0),
    aes(
      y = `nn - n`,
      label = `nn - n`,
    ),
    color = cores_aep[["rosa"]],
    vjust = -.5,
    hjust = 0,
    size = 2.5,
    fontface = "bold",
    angle = 45
  ) +
  labs(
    title = "Detecção dos termos relacionados a LGPD",
    subtitle = "Considerando menções no pedido e na resposta",
    x = NULL,
    y = "Quantidade de pedidos",
    fill = "Pedido\nmenciona LGPD"
  ) +
  scale_fill_manual(values = c(alpha(cores_aep[["laranja"]], .5),
                               cores_aep[["rosa"]])) +
  scale_x_date(date_breaks = "6 months", date_labels = "%b-%Y") +
  theme(axis.ticks.x = element_line())

lgpd_counts <- lgpd %>% 
  select(data_registro, where(is.logical)) %>% 
  filter(usa_lgpd) %>% 
  mutate(
    data_registro,
    mencao_lgpd = case_when(
      !usa_lgpd_assunto &
        !usa_lgpd_pedido &
        !usa_lgpd_pedido_resumido ~ str_glue(
          "Solicitante não menciona LGPD em pedido,",
          "\nórgão menciona na resposta"
        ),
      TRUE ~ "Solicitante menciona LGPD no pedido ou assunto do pedido"
    )
  ) %>% 
  count(data_registro, mencao_lgpd)

O pico de Abril de 2020 pode ser explicado por pedidos que mencionam a LGPD ou no assunto (ao fazer o pedido, o solicitante seleciona a opção “Dados Pessoais - LGPD” no campo “Assunto do pedido”) ou no conteúdo do pedido

lgpd_counts %>% 
  ggplot(aes(x = data_registro, y = n, color = reorder(mencao_lgpd, -n))) +
  geom_line(size = 1.3) +
  geom_point(size = 2) +
  scale_color_manual(values = c(cores_tb[["azul"]], cores_aep[["rosa"]])) +
  labs(title = "Onde a LGPD foi mencionada",
       color = NULL,
       x = "Quantidade",
       y = "Ano"
       ) +
  theme(legend.position = "top",
        legend.direction = "vertical",
        legend.justification = "left")

Analisando ano a ano, agregando os meses, as solicitações respondidas com menções à LGPD, praticamente dobrou em 2021 em relação à 2020.

lgpd_counts %>% 
  count(ano = year(data_registro), mencao_lgpd,
        wt = n, name = "n") %>%
  ggplot(aes(x = ano, y = n, color = mencao_lgpd)) +
  geom_line(
    data = . %>%
      filter(mencao_lgpd != str_glue("Solicitante não menciona LGPD em pedido,",
                                     "\nórgão menciona na resposta")),
    size = 1.3) +
  geom_point(
    data = . %>%
      filter(mencao_lgpd != str_glue("Solicitante não menciona LGPD em pedido,",
                                     "\nórgão menciona na resposta")),
    size = 2.3, shape = 17) +
  geom_line(
    data = . %>%
      filter(mencao_lgpd == str_glue("Solicitante não menciona LGPD em pedido,",
                                     "\nórgão menciona na resposta")),
    size = 1.3) +
  geom_point(
    data = . %>%
      filter(mencao_lgpd == str_glue("Solicitante não menciona LGPD em pedido,",
                                     "\nórgão menciona na resposta")),
    size = 2) +
  scale_color_manual(values = c(cores_tb[["azul"]], cores_aep[["rosa"]])) +
  labs(title = "Onde a LGPD foi mencionada",
       color = NULL,
       x = "Quantidade",
       y = "Ano"
       ) +
  theme(
    legend.position = "top",
    legend.direction = "vertical",
    legend.justification = "left"
  )

lgpd_counts %>% 
  filter(str_detect(mencao_lgpd, "Solicitante não menciona LGPD em pedido")) %>% 
  mutate(mencao_lgpd = str_replace(mencao_lgpd, "\\n", " ")) %>% 
  ggplot(aes(x = data_registro, y = n, fill = mencao_lgpd)) +
  geom_col() +
  scale_fill_manual(values = cores_aep[["rosa"]]) +
  labs(
    y = "Quantidade de resposta",
    x = NULL,
    title = str_glue(
      "Evolução do uso da LGPD nas respostas dos ",
      "pedidos de acesso a informação via LAI"
    ),
    fill = NULL
  ) +
  theme(
    legend.justification = "left",
    legend.position = "top"
  )

Uso da LGPD pelos órgãos para responder uma demanda qualquer via LAI

Quantidade de vezes que órgãos citaram LGPD para responder algum pedido:

O termo LGPD foi detectado na resposta do pedido, mas o solicitante não menciona o assunto no pedido (o termo não é detectado no pedido).

qt_lgpd <- lgpd %>% 
  filter(
    usa_lgpd_resposta &
     !usa_lgpd_pedido & 
     !usa_lgpd_pedido_resumido & 
     assunto_pedido != "Dados Pessoais - LGPD" 
  ) %>% 
  count(ano = year(data_registro), usa_lgpd_resposta, usa_lgpd_pedido) 

qt_lgpd %>% 
  ggplot(aes(x = ano, y = cumsum(n))) +
  geom_col(fill = cores_aep[["laranja"]]) +
  geom_text(aes(label = cumsum(n)), vjust = 0) +
  labs(
    x = "Ano",
    y = "Quantidade (acumulada)",
    title = "Quantidade acumulada de respostas dadas citando LGPD",
    subtitle = str_glue(
      "Até setembro de 2021 foram {sum(qt_lgpd$n)} ",
      "usos da LGPD em respostas aos solicitantes pelos órgãos, sem que os \n",
      "solicitantes façam menções à LGPD no pedido"
  ))

Assuntos onde o órgão mencionou a LGPD

lgpd %>% 
  filter(
    usa_lgpd_resposta &
     !usa_lgpd_pedido & 
     !usa_lgpd_pedido_resumido & 
     assunto_pedido != "Dados Pessoais - LGPD" 
  ) %>% 
  count(assunto_pedido, sort = T) %>%
  slice_max(n = 10, order_by = n) %>% 
  ggplot(aes(x = reorder(assunto_pedido, n), y = n)) +
  geom_col(fill = cores_tb[["azul"]]) +
  geom_text(aes(label = n), hjust = 0) +
  labs(
    title = "10 principais assuntos em que em que o órgão mencionou LGPD\nna resposta",
    y = "Quntidade de pedidos",
    x = NULL
  ) +
  coord_flip()

Decisões quando órgão menciona LGPD

Geral

lgpd %>% 
  filter(
    usa_lgpd_resposta &
     !usa_lgpd_pedido & 
     !usa_lgpd_pedido_resumido & 
     assunto_pedido != "Dados Pessoais - LGPD" 
  ) %>% 
  count(decisao, sort = T) %>%
  ggplot(aes(x = reorder(decisao, n), y = n)) +
  geom_col(aes(fill = decisao), show.legend = F) +
  geom_text(aes(label = n), hjust = 0) +
  labs(
    title = "Decisão mais frequente quando órgão menciona LGPD\nna resposta",
    y = "Quntidade de pedidos",
    x = NULL
  ) +
  scale_fill_manual(values = cores_decisao2) +
  coord_flip()

Ano a ano

cores_decisao_aux <- cores_decisao[-c(2, 5)]
cores_decisao_aux[["Informação Inexistente"]] <- cores_aep[["marrom"]]

names(cores_decisao_aux) <- str_wrap(names(cores_decisao_aux), 25)

lgpd %>% 
  filter(
    usa_lgpd_resposta &
     !usa_lgpd_pedido & 
     !usa_lgpd_pedido_resumido & 
     assunto_pedido != "Dados Pessoais - LGPD" 
  ) %>% 
  count(ano = year(data_registro), decisao, sort = T) %>% 
  complete(decisao, ano, fill = list(n = 0)) %>% 
  mutate(decisao = str_wrap(decisao, 25)) %>% 
  filter(ano > 2018) %>% 
  ggplot(aes(x = reorder(ano, n), y = n, fill = decisao)) +
  geom_col(position = "dodge") +
  geom_text(aes(label = if_else(n > 0, n, NA_real_)),
            position = position_dodge(width = .9), vjust = 0) +
  scale_fill_manual(values = cores_decisao_aux) +
  ylim(c(0, 600)) +
  facet_wrap(ano ~ ., scales = "free_x", ncol = 1) +
  labs(
    title = "Decisões quando órgão menciona LGPD",
    y = "Quantidade de pedidos",
    x = "Decisão",
    fill = "Decisão:"
  ) +
  theme(
    axis.text.x = element_blank(),
    strip.text = element_text(hjust = 0, face = "bold", size = 14),
    legend.text = element_text(size = 8, margin = margin(5, 0, 5, 0, "pt"))
  )


cores_decisao_aux <- cores_decisao[-c(2, 5)]
cores_decisao_aux[["Informação Inexistente"]] <- cores_aep[["marrom"]]

lgpd %>% 
  filter(
    usa_lgpd_resposta &
     !usa_lgpd_pedido & 
     !usa_lgpd_pedido_resumido & 
     assunto_pedido != "Dados Pessoais - LGPD" 
  ) %>% 
  count(ano = year(data_registro), decisao, sort = T) %>% 
  complete(decisao, ano, fill = list(n = 0)) %>% 
  #mutate(decisao = str_wrap(decisao, 25)) %>% 
  filter(ano > 2018) %>% 
  ggplot(aes(x = reorder(ano, n), y = n, fill = decisao)) +
  geom_col(position = "dodge") +
  geom_text(
    aes(label = if_else(n > 20, n, NA_real_)),
    color = cores_tb[["cinza_quase_branco"]],
    position = position_dodge(width = .9),
    vjust = 1
  ) +
  geom_text(
    aes(label = if_else(n > 0 & n < 20, n, NA_real_)),
    position = position_dodge(width = .9),
    vjust = 0
  ) +
  scale_fill_manual(values = cores_decisao_aux) +
  ylim(c(0, 600)) +
  facet_wrap(ano ~ ., scales = "free_x", ncol = 3, strip.position = "bottom") +
  labs(
    title = NULL,
    y = "Quantidade de pedidos",
    x = NULL,
    fill = NULL
  ) +
  #guides(color = guide_legend(ncol = 1, title.position = "top")) +
  theme(
    axis.text.x = element_blank(),
    strip.text = element_text(hjust = 0.5, face = "bold", size = 12),
    legend.text = element_text(size = 8, margin = margin(5, 0, 5, 0, "pt")),
    legend.position = "bottom",
    legend.direction = "vertical",
    legend.justification = "left",
    panel.spacing = unit(0, "lines")
  )

lgpd %>% 
  filter(
    usa_lgpd_resposta &
     !usa_lgpd_pedido & 
     !usa_lgpd_pedido_resumido & 
     assunto_pedido != "Dados Pessoais - LGPD" 
  ) %>% 
  count(data_registro, decisao, sort = T) %>% 
  mutate(decisao = str_wrap(decisao, 25)) %>% 
  ggplot(aes(x = data_registro, y = n, color = decisao)) +
  geom_line(size = 1) +
  scale_color_manual(values = cores_decisao_aux) +
  labs(
    title = "Evolução das decisões quando órgão menciona LGPD nas respostas",
    subtitle = "Solicitante não menciona LGPD no pedido",
    x = NULL,
    y = "Quantidade de pedidos"
  )

lgpd %>% 
  filter(
    usa_lgpd_resposta &
     !usa_lgpd_pedido & 
     !usa_lgpd_pedido_resumido & 
     assunto_pedido != "Dados Pessoais - LGPD" 
  ) %>% 
  count(data_registro, decisao, sort = T) %>% 
  filter(decisao == "Acesso Negado") %>% 
  ggplot(aes(x = data_registro, y = n)) +
  geom_col(fill = cores_aep[["rosa"]]) +
  geom_text(aes(label = n), vjust = 0) +
  labs(
    title = "Evolução das decisões de acesso negado quando órgão menciona LGPD nas respostas",
    subtitle = "Solicitante não menciona LGPD no pedido",
    x = NULL,
    y = "Quantidade de pedidos\ncom acesso negado"
  )

Órgãos que mais usaram LGPD em respostas

O gráfico abaixo mostra os órgãos que mencionaram a LGPD, considerando somente pedidos em que o solicitante não menciona ou não faz referência à LGPD no pedido.

lgpd %>% 
  filter(
    usa_lgpd_resposta &
     !usa_lgpd_pedido & 
     !usa_lgpd_pedido_resumido & 
     assunto_pedido != "Dados Pessoais - LGPD" 
  ) %>%
  count(sigla = str_extract(orgao, "^[:upper:]+(?= )|^GSI-PR"), sort = T) %>% 
  group_by(n) %>%
  nest() %>%
  ungroup() %>%
  mutate(
    sigla = map(data, pull, sigla),
    sigla = paste(sigla),
    sigla = str_remove_all(sigla, "^c\\(|\\\"|\\)" ),
    sigla = str_wrap(sigla, 100)
  ) %>% 
  filter(n > 10) %>% 
  ggplot(aes(x = reorder(sigla, n), y = n)) +
  geom_col(fill = cores_aep[["rosa"]]) +
  geom_text(aes(label = n), hjust = 0) +
  coord_flip() +
  labs(
    title = "Quantidade de respostas que mencionam a LGPD, por órgão",
    subtitle = str_glue(
      "Solicitante não menciona LGPD em pedido ou assunto do pedido, ",
      "órgão menciona na resposta"
    ),
    x = "Órgão (sigla)",
    y = "Quantidade de pedidos respondidos"
  )

plot_historico_mencao_lgpd <- function(df, nome_orgao) {
  df <- df %>%
    filter(orgao == nome_orgao) %>% 
    filter(
      usa_lgpd_resposta &
       !usa_lgpd_pedido & 
       !usa_lgpd_pedido_resumido & 
       assunto_pedido != "Dados Pessoais - LGPD" 
    )  %>%
    count(data_registro, orgao) 
  
  df %>% 
    ggplot(aes(x = data_registro, y = n)) +
    geom_col(fill = cores_aep[["rosa"]]) +
    scale_x_date(date_labels = "%b-%Y") +
    labs(
      title = str_glue("{unique(df$orgao)}"),
      subtitle = "Menções à LGPD apenas na resposta e ausentes nos pedidos",
      x = NULL,
      y = "Quantidade de pedidos respondidos"
    )
}

plot_assuntos_mencao_lgpd <- function(df, nome_orgao) {
  df <- df %>% 
    filter(orgao == nome_orgao) %>% 
    filter(
      usa_lgpd_resposta &
        !usa_lgpd_pedido & 
        !usa_lgpd_pedido_resumido &
        assunto_pedido != "Dados Pessoais - LGPD"
    ) %>% 
  count(assunto_pedido = str_wrap(assunto_pedido, 30), orgao, sort = T) %>%
  filter(row_number() <= 10)
  
  df %>% 
    ggplot(aes(y = n, x = reorder(assunto_pedido, n))) +
    geom_col(fill = cores_aep[["laranja"]]) +
    geom_text(aes(label = n), hjust = 0) +
    coord_flip() +
    labs(
      title = str_glue("Principais assuntos - {unique(df$orgao)}"),
      subtitle = "Assuntos abordados que levaram o órgão a responder com menção a LGPD",
      x = NULL,
      y = "Quantidade de pedidos"
    )
}

plot_decisoes_mencao_lgpd <- function(df, nome_orgao) {
  df <- df %>% 
    filter(orgao == nome_orgao) %>% 
    filter(
      usa_lgpd_resposta &
        !usa_lgpd_pedido & 
        !usa_lgpd_pedido_resumido &
        assunto_pedido != "Dados Pessoais - LGPD"
    ) %>% 
  count(orgao, data_registro, decisao = str_wrap(decisao, 25), sort = T)
  
  cores_decisao <- str_wrap(cores_decisao[-c(2, 5)], 25)
  
  df %>% 
    ggplot(aes(x = data_registro, y = n, color = decisao)) +
    geom_line(size = .8) +
    scale_color_manual(values = cores_decisao) +
    scale_x_date(date_labels = "%b-%Y") +
    labs(
      title = str_glue("{unique(df$orgao)}"),
      subtitle = "Menção à LGPD e decisão sobre acesso",
      x = NULL,
      y = "Quantidade"
    )
}

plot_wordcloud_mencao_lgpd <- function(df, nome_orgao) {
  df <- df %>% 
    filter(orgao == nome_orgao) %>% 
    filter(
      usa_lgpd_resposta &
       !usa_lgpd_pedido & 
       !usa_lgpd_pedido_resumido & 
       assunto_pedido != "Dados Pessoais - LGPD" 
    ) %>% 
    select(id_pedido, detalhamento_solicitacao_clean) %>% 
    unnest_tokens(word, detalhamento_solicitacao_clean) %>% 
    anti_join(stopwords) %>% 
    mutate(
        word = str_extract(word, "[a-z']+"),
        word = if_else(word == "urltag", "link-url", word)
    ) %>% 
    filter(!str_count(word) %in% c(1, 2)) %>%
    count(word, sort = T)
  
  df %>% 
    with(
      wordcloud(
        word,
        n,
        max.words = 150,
        random.order = F,
        random.color = F,
        main = title,
        colors = c(
          cores_tb[["cinza_claro"]],
          cores_aep[["laranja"]],
          cores_aep[["rosa"]],
          cores_tb[["azul"]]
        )
      )
    )
  
}

MS - Ministério da Saúde

Ministério da Saúde nega pedidos de acesso a informação em casos relacionados a pandemia.

plot_historico_mencao_lgpd(lgpd, "MS – Ministério da Saúde")

plot_assuntos_mencao_lgpd(lgpd, "MS – Ministério da Saúde")

plot_decisoes_mencao_lgpd(lgpd, "MS – Ministério da Saúde")

plot_wordcloud_mencao_lgpd(lgpd, "MS – Ministério da Saúde")

INCRA – Instituto Nacional de Colonização e Reforma Agrária

plot_historico_mencao_lgpd(lgpd, "INCRA – Instituto Nacional de Colonização e Reforma Agrária")     

plot_assuntos_mencao_lgpd(lgpd, "INCRA – Instituto Nacional de Colonização e Reforma Agrária") 

plot_decisoes_mencao_lgpd(lgpd, "INCRA – Instituto Nacional de Colonização e Reforma Agrária")

plot_wordcloud_mencao_lgpd(lgpd, "INCRA – Instituto Nacional de Colonização e Reforma Agrária")

INSS – Instituto Nacional do Seguro Social

plot_historico_mencao_lgpd(lgpd, "INSS – Instituto Nacional do Seguro Social")                 

plot_assuntos_mencao_lgpd(lgpd, "INSS – Instituto Nacional do Seguro Social")  

plot_decisoes_mencao_lgpd(lgpd, "INSS – Instituto Nacional do Seguro Social")  

plot_wordcloud_mencao_lgpd(lgpd, "INSS – Instituto Nacional do Seguro Social")

IMBEL – Indústria de Material Bélico do Brasil

plot_historico_mencao_lgpd(lgpd, "IMBEL – Indústria de Material Bélico do Brasil")

plot_assuntos_mencao_lgpd(lgpd, "IMBEL – Indústria de Material Bélico do Brasil")

plot_decisoes_mencao_lgpd(lgpd, "IMBEL – Indústria de Material Bélico do Brasil")

plot_wordcloud_mencao_lgpd(lgpd, "IMBEL – Indústria de Material Bélico do Brasil")

GSI-PR – Gabinete de Segurança Institucional da Presidência da República

plot_historico_mencao_lgpd(lgpd, "GSI-PR – Gabinete de Segurança Institucional da Presidência da República")

plot_assuntos_mencao_lgpd(lgpd, "GSI-PR – Gabinete de Segurança Institucional da Presidência da República")

plot_decisoes_mencao_lgpd(lgpd, "GSI-PR – Gabinete de Segurança Institucional da Presidência da República")

plot_wordcloud_mencao_lgpd(lgpd, "GSI-PR – Gabinete de Segurança Institucional da Presidência da República")

ME - Ministério da Economia

plot_historico_mencao_lgpd(lgpd, "ME - Ministério da Economia")

plot_assuntos_mencao_lgpd(lgpd, "ME - Ministério da Economia")

plot_decisoes_mencao_lgpd(lgpd, "ME - Ministério da Economia")

plot_wordcloud_mencao_lgpd(lgpd, "ME - Ministério da Economia")

CNPQ – Conselho Nacional de Desenvolvimento Científico e Tecnológico

plot_historico_mencao_lgpd(lgpd, "CNPQ – Conselho Nacional de Desenvolvimento Científico e Tecnológico")         

plot_assuntos_mencao_lgpd(lgpd, "CNPQ – Conselho Nacional de Desenvolvimento Científico e Tecnológico")         

plot_decisoes_mencao_lgpd(lgpd, "CNPQ – Conselho Nacional de Desenvolvimento Científico e Tecnológico")

plot_wordcloud_mencao_lgpd(lgpd, "CNPQ – Conselho Nacional de Desenvolvimento Científico e Tecnológico")

INEP – Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira

plot_historico_mencao_lgpd(lgpd, "INEP – Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira")

plot_assuntos_mencao_lgpd(lgpd, "INEP – Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira")

plot_decisoes_mencao_lgpd(lgpd, "INEP – Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira")

plot_wordcloud_mencao_lgpd(lgpd, "INEP – Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira")

MMFDH – Ministério da Mulher, da Família e dos Direitos Humanos

plot_historico_mencao_lgpd(lgpd, "MMFDH – Ministério da Mulher, da Família e dos Direitos Humanos")

plot_assuntos_mencao_lgpd(lgpd, "MMFDH – Ministério da Mulher, da Família e dos Direitos Humanos")

plot_decisoes_mencao_lgpd(lgpd, "MMFDH – Ministério da Mulher, da Família e dos Direitos Humanos")

plot_wordcloud_mencao_lgpd(lgpd, "MMFDH – Ministério da Mulher, da Família e dos Direitos Humanos")

ANEEL – Agência Nacional de Energia Elétrica

plot_historico_mencao_lgpd(lgpd, "ANEEL – Agência Nacional de Energia Elétrica")             

plot_assuntos_mencao_lgpd(lgpd, "ANEEL – Agência Nacional de Energia Elétrica")    

plot_decisoes_mencao_lgpd(lgpd, "ANEEL – Agência Nacional de Energia Elétrica")

plot_wordcloud_mencao_lgpd(lgpd, "ANEEL – Agência Nacional de Energia Elétrica")

CGU – Controladoria-Geral da União

plot_historico_mencao_lgpd(lgpd, "CGU – Controladoria-Geral da União")                                

plot_assuntos_mencao_lgpd(lgpd, "CGU – Controladoria-Geral da União")     

plot_decisoes_mencao_lgpd(lgpd, "CGU – Controladoria-Geral da União")

plot_wordcloud_mencao_lgpd(lgpd, "CGU – Controladoria-Geral da União")

MCTI – Ministério da Ciência, Tecnologia, Inovações

plot_historico_mencao_lgpd(lgpd, "MCTI – Ministério da Ciência, Tecnologia, Inovações")

plot_assuntos_mencao_lgpd(lgpd, "MCTI – Ministério da Ciência, Tecnologia, Inovações")

plot_decisoes_mencao_lgpd(lgpd, "MCTI – Ministério da Ciência, Tecnologia, Inovações")

plot_wordcloud_mencao_lgpd(lgpd, "MCTI – Ministério da Ciência, Tecnologia, Inovações")

PETROBRAS – Petróleo Brasileiro S.A.

plot_historico_mencao_lgpd(lgpd, "PETROBRAS – Petróleo Brasileiro S.A.")

plot_assuntos_mencao_lgpd(lgpd, "PETROBRAS – Petróleo Brasileiro S.A.")

plot_decisoes_mencao_lgpd(lgpd, "PETROBRAS – Petróleo Brasileiro S.A.")

plot_wordcloud_mencao_lgpd(lgpd, "PETROBRAS – Petróleo Brasileiro S.A.")

MAPA – Ministério da Agricultura, Pecuária e Abastecimento

plot_historico_mencao_lgpd(lgpd, "MAPA – Ministério da Agricultura, Pecuária e Abastecimento")

plot_assuntos_mencao_lgpd(lgpd, "MAPA – Ministério da Agricultura, Pecuária e Abastecimento")

plot_decisoes_mencao_lgpd(lgpd, "MAPA – Ministério da Agricultura, Pecuária e Abastecimento")

plot_wordcloud_mencao_lgpd(lgpd, "MAPA – Ministério da Agricultura, Pecuária e Abastecimento")

MD – Ministério da Defesa

plot_historico_mencao_lgpd(lgpd, "MD – Ministério da Defesa")

plot_assuntos_mencao_lgpd(lgpd, "MD – Ministério da Defesa")

plot_decisoes_mencao_lgpd(lgpd, "MD – Ministério da Defesa")

plot_wordcloud_mencao_lgpd(lgpd, "MD – Ministério da Defesa")

ANVISA – Agência Nacional de Vigilância Sanitária

plot_historico_mencao_lgpd(lgpd, "ANVISA – Agência Nacional de Vigilância Sanitária")

plot_assuntos_mencao_lgpd(lgpd, "ANVISA – Agência Nacional de Vigilância Sanitária")

plot_decisoes_mencao_lgpd(lgpd, "ANVISA – Agência Nacional de Vigilância Sanitária")

plot_wordcloud_mencao_lgpd(lgpd, "ANVISA – Agência Nacional de Vigilância Sanitária")

BB – Banco do Brasil S.A.

plot_historico_mencao_lgpd(lgpd, "BB – Banco do Brasil S.A.")

plot_assuntos_mencao_lgpd(lgpd, "BB – Banco do Brasil S.A.")

plot_decisoes_mencao_lgpd(lgpd, "BB – Banco do Brasil S.A.")

plot_wordcloud_mencao_lgpd(lgpd, "BB – Banco do Brasil S.A.")

Acesso Negado

Quais foram os órgãos que mais emitiram respostas que mencionam a LGPD e foram classificadas como “Acesso Negado”, por ano?

lgpd_negativas <- lgpd %>%
  select(
    id_pedido, orgao, data_registro,
    decisao, where(is.logical), assunto_pedido
  ) %>% 
  add_count(orgao, name = "n_orgao") %>% 
  add_count(orgao, decisao, name = "n_orgao_decisao") %>%
  add_count(decisao, name = "n_decisao") %>%
  filter(
    usa_lgpd_resposta &
     !usa_lgpd_pedido & 
     !usa_lgpd_pedido_resumido & 
     assunto_pedido != "Dados Pessoais - LGPD" 
  ) %>% 
  filter(decisao == "Acesso Negado")

lgpd_negativas  %>% 
  select(
    data_registro, orgao, decisao, assunto_pedido, 
    starts_with("usa"), starts_with("n")
  ) %>% 
  distinct() %>% 
  count(
    orgao = str_extract(orgao, "^[:upper:]+(?= )|^[:upper:]+-PR|^FUNRei|^MTur|UFCAT$"), 
    sort = TRUE
  ) %>%
  slice_max(n = 15, order_by = n) %>% 
  ggplot(aes(x = reorder(orgao, n), y = n)) +
  geom_col(fill = cores_aep[["rosa"]]) +
  geom_text(aes(label = n), hjust = 1, 
            color = cores_tb[["cinza_quase_branco"]]) +
  coord_flip() +
  labs(
    title = "Acessos negados mencionando a LGPD na resposta",
    subtitle = "Solicitante não menciona LGPD no pedido",
    x = NULL,
    y = "Quantidade"
  )

Lista completa:

tbla <- lgpd_negativas %>% 
  select(
    data_registro, orgao, decisao, assunto_pedido, 
    starts_with("usa"), starts_with("n")
  ) %>% 
  distinct() %>% 
  count(orgao, sort = TRUE)

tbla %>% 
  rename(
    "Órgão" = orgao,
    "Quantidade de pedidos com acesso negado" = n
  ) %>% 
  reactable::reactable(
    defaultPageSize = 20,
    resizable = TRUE,
    filterable = TRUE,
    searchable = TRUE,
  )

Acesso Negado por assunto e órgão


lgpd_negativas  %>% 
  select(
    data_registro, orgao, decisao, assunto_pedido, 
    starts_with("usa"), starts_with("n")
  ) %>% 
  distinct() %>%
  #filter(orgao == "MS – Ministério da Saúde") %>% 
  count(orgao, assunto_pedido) %>%
  mutate(
    orgao = str_extract(orgao, "^[:upper:]+(?= )|^[:upper:]+-PR|^FUNRei|^MTur|UFCAT$")
  ) %>% 
  slice_max(n = 15, order_by = n) %>% 
  ggplot(aes(x = reorder(assunto_pedido, n), y = n)) +
  geom_col(fill = cores_aep[["rosa"]]) +
  coord_flip() +
  geom_text(aes(label = n), color = cores_tb[["cinza_quase_branco"]], hjust = 1) +
  facet_wrap(reorder(orgao, -n, sum) ~ ., scales = "free_y", ncol = 2) +
  labs(
    title = "Acesso negado por assunto e órgão",
    subtitle = "Quando órgão menciona LGPD",
    x = NULL,
    y = "Quantidade"
  )